Solaris 10: советы и приёмы системного администрированияSolaris 10: советы и приёмы системного администрирования |
|
Sponsored LinksКатегорииLinksUnix Tutorial
Personal Development Ruslan Valiev Solaris Performance Team Damien Farnham Fintan Ryan Nicky Veitch Niall Mullen Sean McGrath DTrace Bryan Cantrill Brendan Gregg ZFS Tim Foster General Ben Rockwood Learning Solaris 10 Privacy policy |
Monday, 7 March. 2005Зоны в Solaris 10: часть первая - рабочий пример
Многие уже слышали и читали о зонах в Solaris 10 - это технология виртуализации, позволяющая создавать изолированные и защищённые среды для выполнения приложений. Для конечного пользователя эти среды выглядят как отдельные Solaris-системы установленные на неких абстрактных машинах. Внутри зоны, выполняемые приложения ни видят внешних процессов, не относящихся к этой зоне. Изоляция сделана на таком уровне, что процессы одной зоны не могут ни наблюдать, ни как-то влиять на процессы других зон.
Всё это сделано на уровне программного обеспечения, и по умолчанию на вашей свежеустановленной Solaris 10 существует глобальная зона - только находясь в ней, можно просматривать процессы всех остальных зон. Вы, наверное, и не заметили, что после установки Solaris 10 сразу же оказались в глобальной зоне? Её легко увидеть: CODE: bash-3.00$ zoneadm list -vc ID NAME STATUS PATH 0 global running / Создать не-глобальную зону очень просто. Отведите для неё необходимое пространство на диске, и запускайте команду zonecfg. В качестве параметра нужно указать имя создаваемой или конфигурируемой зоны: zonecfg -z zone3 Если указанной зоны не существует, то об этом будет выдано соответствующее сообщение. После этого вы попадаете в командный интерфейс, где следует последовательно ввести следующие команды (построчно). CODE: bash-3.00# zonecfg -z zone3 zone3: No such zone configured Use 'create' to begin configuring a new zone. zonecfg:zone3> create zonecfg:zone3> set zonepath=/sr/zones/3 zonecfg:zone3> set autoboot=false zonecfg:zone3> add net zonecfg:zone3:net> set address=192.168.0.7 zonecfg:zone3:net> set physical=bge0 zonecfg:zone3:net> end zonecfg:zone3> verify zonecfg:zone3> exit Этот пример создаст нам простейшую зону. Как видно, параметров указывать нужно не так уж много: zonepath - содержит полный путь к каталогу, где будут размещаться файлы нашей зоны autoboot - флаг, устанавливающий, следует ли при перезагрузке основной системы (с глобальной зоной) автоматически загружать указанную зону Далее мы присваиваем нашей зоне один сетевой интерфейс и указываем для него IP-адрес. Указывается имя реального сетевого интерфейса, существующего в нашей глобальной зоне. Для создаваемой зоны будет создан виртуальный интерфейс на основе указанного реального интерфейса. После этого следует проверить (verify), всё ли верно - проверяется, что все необходимые минимальные свойства получили какие-то значения, и можно завершать работу с командой. Теперь, если мы снова взглянем на список зон, существующих в нашей системе, мы увидем и свежесозданную зону: CODE: bash-3.00# zoneadm list -vc ID NAME STATUS PATH 0 global running / - zone3 configured /sr/zones/3 Пока что она находится в сконфигурированном состоянии, но до тех пор, пока мы не установим на неё ОС, она не получит своего идентификатора (поле ID), и тем более не сможет быть загружена. Немного расскажу про состояния, в которых может находиться не-глобальная зона: configured - система сконфигурирована, но элементы окружения, создаваемые при первой загрузке зоны, ещё не существуют. incomplete - во время операций инсталляции и деинсталляции, команда zoneadm устанавливает статус зоны именно в это значение. По завершении операций с зоной, её статус меняется. installed - конфигурация завершена, и даже пакеты ОС были уже установлены в корневой каталог зоны. По сути, это уже готовая к использованию зона, которую осталось лишь загрузить. Виртуальное пространство для этой зоны пока ещё не отведено. ready - система готова к началу работы. Для неё уже отведено виртуальное пространство, ядро вашей системы создало процесс планировщика зон zsched, сетевые интерфейсы активированы, файловые системы монтированы, и устройства зоны сконфигурированы. Никаких процессов в самой зоне запущено ещё не было, но зоне уже присвоен идентификатор. По сути, это состояние мы никогда не видим - после загрузки зоны, она немедленно начинает выполнять какие-то процессы инициализации, и соответственно, переходит в следующее состояние. running - процессы в зоне выполняются. Можно подключиться к зоне и начать работу. Полностью функциональная среда. shutting down и down - это кратковременные состояния зоны, которые отображаются, пока процессы зоны завершают работу после выполнения команды halt. После этого, зона переходит в состояние installed, если это нормальное завершение сеанса работы с зоной. Итак, продолжаем конфигурацию нашей зоны. Теперь, нам нужно её установить. Делается это с помощью команды: zoneadm -z zone3 install Далее можно будет наблюдать за процессом установки пакетов в окружении вашей зоны, и по завершении этого процесса будет сообщено полное имя файла с логом установки. Всё! Зона готова! Можно её загружать: zoneadm -z zone3 boot После этого мы, конечно же, не сможем сразу же войти в нашу зону... Почему? А потому, что, хотя пакеты и были установлены, нужно ещё сконфигурировать систему - так же, как и любой бокс, ны который мы устанавливаем Solaris... Только в отличие от обычной установки, с зонами проще - сначала устанавливаются пакеты, а потом уже происходит конфигурация системы. Как бы там ни было, нужно подключиться к виртуальной консоли нашей зоны, и ответить на все задаваемые стандартным Configuration Assistant'ом вопросы. В числе оных будет и вопрос про пароль для root'а. После всего этого, система в нашей зоне перегрузится ещё раз, и вы сможете войти с консоли под root'ом. Если хочется разрешить подключение через обычный rsh, то следует закомментировать строчку CONSOLE=/dev/console в /etc/default/login. К консоли нашей зоны можно подключиться следующей командой, в которой ключик -C как раз и означает, что мы желаем подключиться именно к консоли. zlogin -C zone3 Отключиться от консоли можно будет позднее при вводе стандартной комбинации: "~." (тильда и точка) Ещё один такой момент. Так как не-глобальные зоны будут совместно с глобальной зоной использовать один и тот же физический интерфейс, это уже ваша забота - позаботиться о том, чтобы ваша система (глобальная зона) могла видеть сеть, чей IP вы установили в не-глобальной зоне. Скажем, фрагмент ifconfig -a на моём лаптопе выглядит таким образом: CODE: bge0:1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2 zone zone2 inet 192.168.0.6 netmask ffffff00 broadcast 192.168.0.255 bge0:2: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2 inet 192.168.0.2 netmask ffffff00 broadcast 192.168.0.255 bge0:3: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2 zone zone1 inet 192.168.0.5 netmask ffffff00 broadcast 192.168.0.255 Как видно, адреса, принадлежащие зонам, довольно легко определимы по параметру zone. А мне пришлось создать виртуальный интерфейс с адресом из той же подсети, чтобы я из глобальной зоны мог подсоединиться к моим не-глобальным зонам. Ещё один момент, последний в этой заметке: пакеты программного обеспечения, устанавливаемые в зонах. Особо любопытные из вас, конечно же, уже посмотрели на лог-файл, и увидели, что в зоне установлено довольно много всего - практически, полноценная ОС. При этом, каталог с зоной занимает при установке по умолчанию около 70мб... Такое несоответствие объясняется одной из ключевых особенностей виртуализации зон: они умеют совместно использовать пакеты глобальной зоны. Т.е. можно для каждой зоны указать, что некоторые файлы, которые должны будут быть установлены на неё из стандартных пакетов установки Solaris 10, фактически копировать и устанавливать необязательно - их можно позаимствовать с уже установленных этих же файлов, существующих в глобальной зоне. Естественно, в нее-глобальных зонах, заимствующих файлы из пакетов глобальной зоны, все эти файлы будут доступны только для чтения. Таким образом и достигается значительная экономия места в зонах. По умолчанию, таким образом зоны наследуют все файлы, устанавливаемые из пакетов в каталоги /lib, /platform, /usr и /sbin. Хочу ещё раз подчеркнуть - наследуются только файлы из стандартных пакетов. Т.е. если вы в указанные выше каталоги добавите вручную какие-то ещё файлы, они, естественно, не унаследуются. Ну вот и всё, для первой части вполне достаточно - у вас должна была получиться рабочая зона, в которую можно заходить удалённо, запускать или настраивать в ней сервисы, и вообще полноценно работать. Дальше - больше! Как появится свободная минутка, напишу продолжение... Комментарии
Показывать комментарии
(Как список | Древовидной структурой)
десятка под спарк.. релиз..
может какой пакет надо поставить чтоб были комманды описаные в статье?
Андрей, а что именно за релиз (/etc/release) Solaris 10? Зоны, по идее, с Solaris Express 02/04 в Solaris 10...
А файлы для поддержки зон находятся в пакетах SUNWzoneu, SUNWzoner и SUNWluzone.
Nicely done tutorial on zones! I've been reading the english language part of your 'blog this evening and your grasp of the S10 technologies is really high. Thanks for being such a clear voice. I also like the design of this 'blog very much.
I only have two notes: It's possible to login to the console of a zone before it's ever booted, which lets you more easily see the initial console output. Also, due to the way that loopback mounts work, anything which appears in, say, /usr will be loopbacked into the zone (a good example might be /usr/local), regardless of how you've packaged it. Conversely, if you choose to have "whole root" (or "whole copy") zones, then in that case, only the packaged files are used.
Hi Dan,
Thanks a lot for your comments! Going through a typical zone setup scenario, I simply didn't try some things out, and your comments do clear the situation up ;) I'll be sure to update the entry in a short while. Thanks again! Gleb
This step by step guide is a masterpiece. I think you should maybe collect and publish a book on this.
Thanks. Keep up the good job
Thanks!
I wish I had more time to write more useful tutorials, but comments like yours do help! :) Take care!
появился вопрос:
как выйти из зоны? где нужно находится чтобы команда "~." помогла выйти? не могу разобраться...
Привет!
Чтобы ~. работала, нужно быть подключённым к виртуальной консоли зоны с помощью zlogin.
Great tutorial! Hope to see it more completed soon! Greetings from sweden!
Thanks for taking your time to comments! Yes, I'm thinking of updating this tutorial, stay tuned!
Oh, this is a good introduction to setting up zones. You can expect this to be useful to more people now that OpenSolaris is maturing, I think. Clear, well written tutes such as these are my favorite kinds.
I can see right now that there are many ways to tweak these zones. I will have to make a point to check back and see if you add any other tidbits. Regards, Robert
Thanks, Robert!
I do plan to cover a few more topics indeed, so hope to see you around!
Great tutorial, very simple and clear.
keep the good work up Saq
Hi we're going through a relocation of servers and we need to change newIP and configure new interfaces. I tried use zonecfg from a lobal zone to plumb a new interface and new IP for a local zone. When I do a zonecfg -z zonename info, I can see the new IP and int set but when I login to the zone locally and do ifconfig -a , I don't see it plumb up. How can I see it without rebooting the zone or the sun box itself?
|





Итак, мы уже научились создавать не-глобальные зоны в Solaris. Теперь нужно научиться основам конфигурации зон. Делается это с помощью команды
Tracked: Mar 30, 16:50